package top.bug.blog.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * @author <a href="https://github.com/jiusi66">九思.</a>
 * @email 10837907@qq.com
 * @from <a href="https://www.52bug.top">递归茶馆-www.52bug.top</a>
 * @description Knif4j 配置类
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {

    /**
     * ---------------------- 后台管理接口分组 ----------------------
     */
    @Bean
    public Docket backendApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // 分组名称（显示在文档页面的下拉框中）
                .groupName("后台管理接口")
                // 绑定文档元数据
                .apiInfo(apiInfo())
                .select()
                // 扫描后台接口包
                .apis(RequestHandlerSelectors.basePackage("top.bug.blog.controller.backend"))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * ---------------------- 前台展示接口分组 ----------------------
     */
    @Bean
    public Docket frontApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("前台展示接口")
                .apiInfo(apiInfo())
                .select()
                // 扫描前台接口包
                .apis(RequestHandlerSelectors.basePackage("top.bug.blog.controller.front"))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * ---------------------- 文档基本信息（共用） ----------------------
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题
                .title("Bug Blog API 文档")
                // 详细描述
                .description("前台接口用于内容展示，后台接口用于数据管理")
                // 版本号
                .version("1.0")
                // 作者信息
                .contact(new Contact("bug", "https://github.com/jiusi66", "10837907@qq.com"))
                .build();
    }

}